/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Creditos;

import bdControlador.BdControlador;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author alrojas
 */
public class MCredito {
    
    public static boolean agregar(Credito credito) throws ClassNotFoundException, SQLException{
        Connection conexion = BdControlador.establecerConexion();
        Statement estado = conexion.createStatement();
        
        estado.execute("INSERT INTO credito_cabecera (venta,tasa_interes,interes_mora,nro_cuotas) VALUES ('" + credito.getVenta() + "','" + String.valueOf(credito.getIntereses()) + "','"+ String.valueOf(credito.getMora()) + "','" + String.valueOf(credito.getNroCuotas()) + "');");

        DefaultTableModel data = credito.getData();
        
        ResultSet consulta = estado.executeQuery("SELECT MAX(codigo) FROM credito_cabecera");
        
        String credito_codigo = "";
        if(consulta.next()){
            credito_codigo = consulta.getString(1);
        }
        
        SimpleDateFormat format2 = new SimpleDateFormat("dd/MM/yyyy");
        SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd");
        
        
        for(int i = 0; i < data.getRowCount(); i++){
            try {
                String fecha = format.format(format2.parse(data.getValueAt(i,4).toString()));
                estado.execute("INSERT INTO credito_detalle (credito,monto,fecha_vencimiento) VALUES ('" + credito_codigo + "', '" + data.getValueAt(i,3) + "', '" + fecha + "');");
            } catch (ParseException ex) {
                Logger.getLogger(MCredito.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        
        return true;
    }
    
    public static Vector < Vector > dameCuotas(int codigo) throws SQLException, ClassNotFoundException{
        
        Vector < Vector > cuotas = new Vector < Vector >();
        
        Connection conexion = BdControlador.establecerConexion();
        Statement estado = conexion.createStatement();
        
        
        //System.out.println("SELECT credito_detalle.monto,credito_detalle.fecha_vencimiento,TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) + DATEDIFF(now(),fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) MONTH) / DATEDIFF(fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) + 1 MONTH, fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) MONTH ) as months, credito_cabecera.interes_mora, credito_detalle.codigo FROM credito_cabecera,credito_detalle WHERE credito_detalle.credito=" + String.valueOf(codigo) + " AND credito_detalle.fecha_pago='0000-00-00 00:00:00' AND credito_cabecera.codigo=credito_detalle.credito ORDER BY fecha_vencimiento ASC");
        ResultSet consulta = estado.executeQuery("SELECT credito_detalle.monto,credito_detalle.fecha_vencimiento,TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) + DATEDIFF(now(),fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) MONTH) / DATEDIFF(fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) + 1 MONTH, fecha_vencimiento + INTERVAL TIMESTAMPDIFF(MONTH, fecha_vencimiento, now()) MONTH ) as months, credito_cabecera.interes_mora, credito_detalle.codigo FROM credito_cabecera,credito_detalle WHERE credito_detalle.credito=" + String.valueOf(codigo) + " AND credito_detalle.fecha_pago='0000-00-00 00:00:00' AND credito_cabecera.codigo=credito_detalle.credito ORDER BY fecha_vencimiento ASC");
        
        while(consulta.next()){
            Vector fila = new Vector(); 
            
            fila.add(consulta.getString(5));
            fila.add(consulta.getString(1));
            
            float interes = 0;
            float monto_final = consulta.getFloat(1) + interes;
            for(float i = 0; i < consulta.getFloat(3); i++){
                interes += monto_final * consulta.getFloat(4) / 100.0f; 
                monto_final += interes;
            }
            
            fila.add(String.valueOf(interes));
            fila.add(String.valueOf(monto_final));
            fila.add(consulta.getString(2));
            fila.add(false);
            cuotas.add(fila);
        }
        
        return cuotas;
    } 
    
    public static Vector< Vector< String > > dameTodo() throws SQLException, ClassNotFoundException{
        
        Vector <Vector<String>> creditos = new Vector<Vector<String>>();
        Connection conexion = BdControlador.establecerConexion();
        Statement estado = conexion.createStatement();
        
        ResultSet consulta = estado.executeQuery("SELECT credito_cabecera.codigo,tasa_interes,interes_mora,nro_cuotas,precio_total FROM venta_cabecera,credito_cabecera WHERE venta_cabecera.codigo=credito_cabecera.venta AND cancelado=0 ORDER BY codigo ASC");
        
        while(consulta.next()){
            Vector fila = new Vector(); 
            fila.add(consulta.getString(1));
            fila.add(consulta.getString(2));
            fila.add(consulta.getString(3));
            fila.add(consulta.getString(4));
            fila.add(consulta.getString(5));
            creditos.add(fila);
        }
        BdControlador.liberarConexion(conexion);
        
        return creditos;
    }
    
    public static void pagarCuotas(int codigo, Vector data) throws SQLException, ClassNotFoundException{
        
        Connection conexion = BdControlador.establecerConexion();
        Statement estado = conexion.createStatement();
        
        for(int i = 0; i < data.size(); i++){
            Vector fila = (Vector)data.elementAt(i);
            if(Boolean.valueOf(fila.elementAt(5).toString())){
                //System.out.println("UPDATE credito_detalle SET interes = '" + fila.elementAt(1).toString() + "',monto_final = '" + fila.elementAt(2).toString() + "',fecha_pago=NOW() WHERE codigo=" + fila.elementAt(0).toString() + " AND credito=" + String.valueOf(codigo) + ";");
                estado.execute("UPDATE credito_detalle SET interes = '" + fila.elementAt(1).toString() + "',monto_final = '" + fila.elementAt(2).toString() + "',fecha_pago=NOW() WHERE codigo=" + fila.elementAt(0).toString() + " AND credito=" + String.valueOf(codigo) + ";");
            }
        }
        

        BdControlador.liberarConexion(conexion);

    }
    
    public static Vector < String > dameInfo(int codigo) throws SQLException, ClassNotFoundException{
        
        Vector < String > info = new Vector<String>();
        
        Connection conexion = BdControlador.establecerConexion();
        Statement estado = conexion.createStatement();
        
        ResultSet consulta = estado.executeQuery("SELECT clientes.codigo,CONCAT(clientes.pNombre,' ',clientes.pApellido,' ',clientes.sApellido) AS cliente, credito_cabecera.tasa_interes, credito_cabecera.interes_mora FROM clientes,venta_cabecera,credito_cabecera WHERE credito_cabecera.codigo=" + String.valueOf(codigo) + " AND credito_cabecera.venta=venta_cabecera.codigo AND venta_cabecera.cliente=clientes.codigo");

        if(consulta.next()){
            info.add(consulta.getString(1));
            info.add(consulta.getString(2));
            info.add(consulta.getString(3));
            info.add(consulta.getString(4));
            info.add(consulta.getString(5));
            info.add(consulta.getString(6));
        }
        
        BdControlador.liberarConexion(conexion);
        
        return info;

    }
    
    
    
    
    
    
}
